﻿using System;
using System.Web.Services;
using Entidades;
using Controladores;
using Entidades.jSON;
using Web.Extensions;
using Web.Helpers;
using Newtonsoft.Json;
using Common;

namespace Web.Pages
{
    public partial class _Usuario : Pages.BasePage
    {
        public bool _registroInactivo = false;

        #region Events

        protected new void Page_Load(object sender, EventArgs e)
        {
            base.Page_Load(sender, e);

            if (!Page.IsPostBack)
            {
                var idUsuario = Helpers.WebHelper.Pages.QueryString.GetParameter(Common.WellKnownKeys.Page.Parameters.ID_USUARIO);
                this.CargarPagina(idUsuario);
            }
        }

        #endregion

        #region Private Methods

        private void CargarPagina(string idUsuario)
        {
            var tiposUsuariosInfo = TiposUsuario.ObtenerTodos();
            this.selUsuario_Tipo.Bind(tiposUsuariosInfo, "Id", "Texto");

            var tiposDocumentoInfo = TiposDocumento.ObtenerTodos();
            this.selUsuario_TipoDocumento.Bind(tiposDocumentoInfo, "Id", "Texto");

            var categoriasUsuariosInfo = CategoriasUsuario.ObtenerTodos();
            this.selUsuario_Categoria.Bind(categoriasUsuariosInfo, "Id", "Texto");

            if (!String.IsNullOrEmpty(idUsuario))
                this.CargarUsuario(Convert.ToInt32(idUsuario));
        }

        private void CargarUsuario(int idUsuario)
        {
            var usuario = new ControladorBase<Usuario>().ObtenerEntidad(idUsuario);
            if (usuario == null) 
                return;

            this.selUsuario_Tipo.SetSelected(usuario.Tipo.Id);
            this.selUsuario_Categoria.SetSelected(usuario.Categoria.Id);
            this.selUsuario_TipoDocumento.SetSelected(usuario.TipoDocumento.Id);
            this.txtUsuario_Apellido.Value      = usuario.Apellido;
            this.txtUsuario_Banco.Value         = usuario.Banco;
            this.txtUsuario_CUIT.Value          = usuario.CUIT;
            this.txtUsuario_Celular.Value       = usuario.Celular;
            this.txtUsuario_NroDocumento.Value  = usuario.NroDocumento;
            this.txtUsuario_Email.Value         = usuario.Email;
            this.txtUsuario_Nombre.Value        = usuario.Nombre;
            this.txtUsuario_NombreUsuario.Value = usuario.NombreUsuario;
            this.txtUsuario_Password.Value      = usuario.Password;
            this.txtUsuario_Password.Attributes["type"] = "password";
            this.txtUsuario_Telefono.Value      = usuario.Telefono;
            this.txtUsuario_NombreUsuario.Value = usuario.NombreUsuario;
            this.imgUsuario_Foto.Src            = String.Format("data:image/png;base64, {0}", Common.Formatter.Base64.ConvertirEnBase64(usuario.Foto));
            this.hdnUsuario_Activo.Value        = this.ConvertBoolToString(usuario.Activo);
            this.txtUsuario_NroMatricula.Value  = usuario.NroMatricula;
        }

        #endregion

        #region Web Methods

        /// <summary>
        /// Guarda los datos de un Usuario
        /// </summary>
        /// <param name="infoUsuario"></param>
        /// <returns></returns>
        [WebMethod]
        public static string guardarUsuario(string infoUsuario)
        {
            var mensaje  = string.Empty;
            var resultado  = false;
            object valor    = null;
            try
            {
                var uc                      = new ControladorBase<Usuario>();
                var usuarioInfo             = JsonConvert.DeserializeObject<UsuarioInfo>(infoUsuario);
                var usuario                 = usuarioInfo.Id != WellKnownKeys.Entities.DEFAULT_ID ? uc.ObtenerEntidad( usuarioInfo.Id ) : new Usuario();
                    //usuario.Id            = usuarioInfo.Id;
                    usuario.Apellido        = usuarioInfo.Apellido;
                    usuario.Banco           = usuarioInfo.Banco;
                    usuario.Categoria       = new ControladorBase<UsuarioCategoria>().ObtenerEntidad(usuarioInfo.IdCategoria);
                    usuario.Celular         = usuarioInfo.Celular;
                    usuario.CUIT            = usuarioInfo.CUIT;
                    usuario.TipoDocumento   = new ControladorBase<TipoDocumento>().ObtenerEntidad(usuarioInfo.IdTipoDocumento);
                    usuario.NroDocumento    = usuarioInfo.NroDocumento;
                    usuario.Email           = usuarioInfo.Email;
                    usuario.Foto            = Formatter.Base64.ConvertirEnArrayDeBytes(usuarioInfo.Foto);
                    usuario.Nombre          = usuarioInfo.Nombre;
                    usuario.NombreUsuario   = usuarioInfo.NombreUsuario;
                    usuario.Password        = usuarioInfo.Password;
                    usuario.Telefono        = usuarioInfo.Telefono;
                    usuario.Tipo            = new ControladorBase<UsuarioTipo>().ObtenerEntidad(usuarioInfo.IdTipo);
                    usuario.NroMatricula    = usuarioInfo.NroMatricula;
                    usuario.Activo          = true;

                resultado = Usuarios.GuardarUsuario(uc, usuario);
                if ( resultado )
                {
                    mensaje = "Los datos del Usuario fueron guardados exitosamente.";
                    valor = new UsuarioInfo(usuario);
                }
                else
                {
                    mensaje = "Hubo un error al intentar guardar los datos del Usuario.";
                }
            }
            catch (Exception ex)
            {
                //throw ex;
                LogError(ex);
                mensaje = "Hubo un error al intentar guardar los datos del Usuario." + Environment.NewLine + ex.Message;
            }
            return SessionHelper.BuildResponse(mensaje, resultado, valor);
        }

        #endregion

    }
}